package cn.edu.xjtu.competiton.力扣.双周赛.biweekly87;

/**
 * @author Hydrion-QLz
 * @date 2022-09-17 22:40
 * @description 6184. 统计共同度过的日子数
 * <p>
 * Alice 和 Bob 计划分别去罗马开会。
 * <p>
 * 给你四个字符串 arriveAlice ，leaveAlice ，arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里（日期为闭区间），而 Bob 在日期 arriveBob 到 leaveBob 之间在城市里（日期为闭区间）。每个字符串都包含 5 个字符，格式为 "MM-DD" ，对应着一个日期的月和日。
 * <p>
 * 请你返回 Alice和 Bob 同时在罗马的天数。
 * <p>
 * 你可以假设所有日期都在 同一个 自然年，而且 不是 闰年。每个月份的天数分别为：[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/count-days-spent-together
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class first {
    public static void main(String[] args) {
        countDaysTogether("08-15",
                "08-18",
                "08-16",
                "08-19");
    }

    public static int countDaysTogether(String arriveAlice, String leaveAlice, String arriveBob, String leaveBob) {
        int[] times = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (leaveAlice.compareTo(arriveBob) < 0 || leaveBob.compareTo(arriveAlice) < 0) {
            return 0;
        }
        String start = arriveAlice.compareTo(arriveBob) < 0 ? arriveBob : arriveAlice;
        String end = leaveAlice.compareTo(leaveBob) < 0 ? leaveAlice : leaveBob;
        int startMonth = Integer.parseInt(start.substring(0, 2));
        int startDay = Integer.parseInt(start.substring(3, 5));
        int endMonth = Integer.parseInt(end.substring(0, 2));
        int endDay = Integer.parseInt(end.substring(3, 5));
        int sum = (times[startMonth - 1] - startDay) + (endDay) + 1;
        for (int i = startMonth + 1; i < endMonth; i++) {
            sum += times[i - 1];
        }
        if (startMonth == endMonth) {
            sum -= times[startMonth - 1];
        }
        return sum;
    }
}
